
#include <linux/timer.h>

#define KEY_RELEASE_TIMEOUT	(jiffies+HZ/8)	/* 125ms */

struct timer_list key_release_timer;

static void key_release_handler(unsigned long data)
{
	del_timer(&key_release_timer);

	/* report key release event */
	input_report_key(ir_dev, ir_keycodes[(ir_code >> 16) & 0xff], 0);
	input_sync(ir_dev);

	pr_info("+++ key release\n");
}

void key_release_timer_init(void)
{
	init_timer(&key_release_timer);
	key_release_timer.function = &key_release_handler;
}

void key_report(void)
{
	if (timer_pending(&key_release_timer)) {
		if (repeat_mask==REPEAT_DETECT) {
			mod_timer(&key_release_timer, KEY_RELEASE_TIMEOUT);
			repeat_mask = REPEAT_HANDLE;
			return;
		} else if (keycode_mask==KEYCODE_DETECT) {
			del_timer(&key_release_timer);
		}
	} else {
		if (keycode_mask==KEYCODE_DETECT) {
			
		}
	}
}
